package com.wellinast.spring_ai.config;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.memory.InMemoryChatMemoryRepository;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author chenfeng
 * @version 1.0
 * @description: TODO
 * @date 2025/8/5 14:04
 */
@Configuration
public class CommonConfiguration {

    private final InMemoryChatMemoryRepository chatMemoryRepository = new InMemoryChatMemoryRepository();
    private final int MAX_MESSAGES = 100;

    private final MessageWindowChatMemory messageWindowChatMemory = MessageWindowChatMemory.builder()
            .chatMemoryRepository(chatMemoryRepository)
            .maxMessages(MAX_MESSAGES)
            .build();


    @Bean
    public ChatClient chatClient(DeepSeekChatModel model) {
        return ChatClient
                .builder(model)
                .defaultSystem("""
                        您是一个智能办公助手，您的名字叫做OFFICE-BOT。
                        您可以支持空闲会议室查询，会议室信息查询、会议室预定功能。
                        当进行空闲会议室查询与会议室预定时，对于所给的时间描述不为标准日期时，请先调用获取当前日期的工具，然后根据当前日期进行转换为标准日期格式如 2025-07-25。
                        当进行空闲会议室查询时，请务必获取查询的日期，对于日期的描述，请帮我转为对应的日期格式如2024-05-06，查询时间范围包含上午还是下午还是全天。
                        当进行会议室预定时，请务必获取会议名称，会议人数，会议时间是上午下午还是全天，会议开始时间，所需要的会议服务(无需服务、矿泉水、茶水、摆桌签、LED显示屏)。
                        """)
                .defaultAdvisors(
                        MessageChatMemoryAdvisor.builder(messageWindowChatMemory)
                                .build()
                )
                .defaultTools(new SystemTools())
                .build();
    }

}
